﻿using System;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using BUS;
using System.Text;

public partial class ShoppingCart : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["ProductID"] != null)
        {
            //nếu Session chưa được khởi tạo thị tạo sesson....
            if (!IsPostBack)
            {
                AddOneProductToCart();
            }
        }
        if (!IsPostBack)
        {
            LoadGridView();
        }
        lblMSG.Text = "";
    }

    private void AddOneProductToCart()
    {
        var id = Int32.Parse(Request.QueryString["ProductID"]);
        var sp = SanPhamBUS.GetSanphamByID(id);
        if (sp.SoTon > 0)
        {
            var basket = new Basket();
            basket.AddItem(id, 1);
        }
        else
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "alert", "alert('Sản phẩm đã hết hàng!!!');window.location='Products.aspx';", true);
    }

    private void AlertNullCart()
    {
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "alert", "alert('Giỏ hàng của bạn chưa có sản phẩm nào.');window.location='Products.aspx';", true);
    }

    private void LoadGridView()
    {
        var basket = new Basket();
        if (basket.Cart.ChiTietDatHangs.Count < 1)
        {
            AlertNullCart();
            return;
        }
        gvCart.DataSource = basket.Cart.ChiTietDatHangs;
        gvCart.DataBind();
        lblTotal.Text = basket.Cart.strThanhTien;
    }

    protected void btnDelAll_Click(object sender, EventArgs e)
    {
        var basket = new Basket();
        basket.RemoveAllItem();
        LoadGridView();
    }

    protected void gvCart_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            var rIndex = e.RowIndex;
            var basket = new Basket();
            basket.Cart.ChiTietDatHangs.RemoveAt(rIndex);
            LoadGridView();
        }
        catch (Exception)
        { throw new Exception(); }
    }

    protected void btnUpdateCart_Click(object sender, EventArgs e)
    {
        var basket = new Basket();
        var error = new StringBuilder();
        foreach (GridViewRow row in gvCart.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                var dataKey = gvCart.DataKeys[row.RowIndex];
                if (dataKey == null) continue;
                var quantity = Int32.Parse(((TextBox)row.FindControl("txtQuantity")).Text);
                var productid = Convert.ToInt32(dataKey.Value);
                var proName = ((HyperLink)row.FindControl("hplProductName")).Text;
                if (quantity > 3)
                {
                    error.Append(String.Format(@"* Sản phẩm {0} chỉ có thể đặt hàng tối đa {1} sản phẩm \n", proName, 3));
                    //set số lượng đặt hàng tối đa bằng số tồn của sản phẩm đó
                    basket.SetItemQuantity(productid, 3);
                }
                else
                    basket.SetItemQuantity(productid, quantity);
            }
        }

        if (error.Length > 0)
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "alert('" + error.ToString() + "');",
                                                true);

        LoadGridView();
    }

    protected void btnSumit_Click(object sender, EventArgs e)
    {
        try
        {
            var kh = new KhachHangBUS()
            {
                //  MaKhachHang = lblMaKhachHang.Text,
                HoTen = txtHoTen.Text,
                SoDienThoai = txtSoDienThoai.Text,
                DiaChi = txtDiaChi.Text,
                CMND = txtCMND.Text,
                Email = txtEmail.Text
            };

            //var basket = new Basket { Cart = { KhachHang = kh } };
            //basket.Add();
            ScriptManager.RegisterStartupScript(this, this.GetType(), "alet", "alert('Bạn đã đăng ký thông tin thành công');", true);
            var basket = new Basket {Cart = {KhachHang = kh}};
            AddUserControlDetailsInfoCustomer(kh);
            MultiView1.SetActiveView(ViewThongTinKhachHang);

            //basket.RemoveAllItem();
        }
        catch (Exception)
        {
            MultiView1.SetActiveView(ViewDangKyThatBai);
            throw;
        }



    }

    protected void btnPayment_Click(object sender, EventArgs e)
    {
        #region Check Cart
        var error = new StringBuilder();
        foreach (var row in gvCart.Rows.Cast<GridViewRow>().Where(row => row.RowType == DataControlRowType.DataRow))
        {
            try
            {
                var dataKey = gvCart.DataKeys[row.RowIndex];
                var basket = new Basket();
                if (dataKey != null)
                {
                    var productid = Convert.ToInt32(dataKey.Value);
                    //lấy số lượng đã đặt sản phẩm với productid
                    var ct = basket.Cart.ChiTietDatHangs.SingleOrDefault<ChiTietDatHangBUS>(p => p.IDSanPham == productid);

                    if (ct != null && ct.SoLuong > 3) //Soluong đặt hàng > 3 thì báo lỗi 
                    {
                        error.Append(String.Format(@"* Sản phẩm {0} chỉ có thể đặt hàng tối đa {1} sản phẩm \n", ct.SanPham.TenSanPham, 3));
                        //set số lượng đặt hàng tối đa bằng số tồn của sản phẩm đó
                        basket.SetItemQuantity(productid, 3);
                    }
                }
            }
            catch (FormatException)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "alert('loi');", true);
            }
        }


        //hiện ra câu thông báo
        if (error.Length > 0)
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "alert('" + error.ToString() + "');", true);

        LoadGridView();
        gvCart.Enabled = false;
        #endregion
        //lblMaKhachHang.Text = KhachHangBUS.GetNextID();
        var sessionUser = Session["user"];
        if (sessionUser != null)
        {
            //Get object KhachHangBUS từ Session
            var kh = new KhachHangBUS { TenDangNhap = (string)sessionUser };
            kh.GetbyUserName();
            var basket = new Basket() {Cart = {KhachHang = kh}};
            AddUserControlDetailsInfoCustomer(kh);
            MultiView1.SetActiveView(ViewThongTinKhachHang);
        }
        else
            MultiView1.SetActiveView(ViewDangKyThongTin);
    }

    private void AddUserControlDetailsInfoCustomer(KhachHangBUS khachHangBus)
    {
        //load user contrl
        var ctrl = Page.LoadControl("~/UserControl/ShoppingCart_DetailsInfoCustomer.ascx");
        //get type anh property của USer Control
        var ctrlType = ctrl.GetType();
        var ctrlInfo = ctrlType.GetProperty("KhachHangBus");

        //set object vào property của User Control
        ctrlInfo.SetValue(ctrl, khachHangBus, null);

        //Add User Control vào Place Holder
        PHThongTinKhachHang.Controls.Add(ctrl);
    }

    protected void btnTaiKhoan_Click(object sender, EventArgs e)
    {        
        //Flag set nếu đã có tài khoản trong website
        var checkLogin = false;
        string error;

        var basket = new Basket();
        var kh = basket.Cart.KhachHang;
        var totalAmount = basket.GetTotalAmountCart();
        
        if (Session["user"] != null)
            checkLogin = true;
        AddUserControlDetailsInfoCustomer(kh);

        if (KhachHangBUS.ProcessAccountNumber(txtSoTaiKhoan.Text, totalAmount, out error))
        {
            
            basket.Add(checkLogin);
            lblMSG.Text = error;
            ScriptManager.RegisterStartupScript(this, GetType(), "alert",
                                                "setTimeout(\"window.location='Default.aspx';\",10000);", true);
        }
        else
        {
            lblMSG.Text = error;
        }
    }
}
